package db

import (
	"database/sql"
	"fmt"
	"time"

	_ "github.com/lib/pq"
)

// Open 初始化 PostgreSQL 数据库连接，并设置连接池参数和健康检查
// dsn: 数据库连接字符串
// 返回 *sql.DB 连接实例和错误信息
func Open(dsn string) (*sql.DB, error) {
	db, err := sql.Open("postgres", dsn)
	if err != nil {
		return nil, err
	}
	// 设置连接池参数
	db.SetMaxOpenConns(25)                 // 最大连接数
	db.SetMaxIdleConns(5)                  // 最大空闲连接数
	db.SetConnMaxLifetime(5 * time.Minute) // 连接最大生命周期

	// 检查数据库连接是否可用
	if err := db.Ping(); err != nil {
		return nil, fmt.Errorf("ping db: %w", err)
	}
	return db, nil
}
